package com.roadjava.rbac.service;

import com.qcloud.cos.model.COSObjectSummary;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;

/**
 * COS（对象存储）服务接口
 * @author 怨九己
 */
public interface CosService {
    /**
     * 上传对象到COS存储桶。
     *
     * @param bucketName 存储桶名称
     * @param key        对象的唯一标识
     * @param file       要上传的文件
     * @return 上传结果（成功或失败）
     * @throws IOException 如果文件上传过程中发生IO异常
     */
    String uploadObject(
            String bucketName,
            String key,
            MultipartFile file) throws IOException;
    /**
     * 从COS存储桶中删除对象。
     *
     * @param bucketName 存储桶名称
     * @param key        对象的唯一标识
     */
    void deleteObject(
            String bucketName,
            String key);
    /**
     * 生成对象的预签名URL，用于临时访问。
     *
     * @param bucketName 存储桶名称
     * @param key        对象的唯一标识
     * @return 预签名URL
     */
    URL generatePresignedUrl(
            String bucketName,
            String key);
    /**
     * 根据对象的唯一标识搜索对象。
     *
     * @param bucketName 存储桶名称
     * @param key        对象的唯一标识
     * @return 搜索到的对象列表
     */
    List<COSObjectSummary> searchObjects(
            String bucketName,
            String key);

    /**
     * 上传大文件到COS存储桶，支持断点续传。
     *
     * @param bucketName 存储桶名称
     * @param key        对象的唯一标识
     * @param file       要上传的大文件
     * @return 上传结果（成功或失败）
     * @throws IOException 如果文件上传过程中发生IO异常
     */
    String uploadLargeFile(
            String bucketName,
            String key,
            File file) throws IOException;
}